package controllers;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.persistence.Query;

import json.CursoSerializer;
import models.Curso;
import models.PlanEstudio;
import play.db.jpa.JPA;
import play.mvc.Controller;
import play.mvc.With;

@With(Secure.class)
public class Cursos extends Controller{

	public static void registrarAsignatura(){
    	render();
    }
    
    public static void registroAsignatura(String nombreplan,String nombrecurso,String numerocreditos,String codigocurso){
    	
    	if(validation.hasErrors()){
    		render("/Application/registrarAsignatura.html");
    	}
    	else
    	{
    	int cantidadcreditos=Integer.parseInt(numerocreditos);
    	int codigo=Integer.parseInt(codigocurso);
    	PlanEstudio plan=PlanEstudio.find("byNombreplan", nombreplan).first();
    	Curso curso= new Curso(plan, nombrecurso, cantidadcreditos, codigo);
    	curso.save();
    	Application.index();
    	}
    }
    
    public static void registroDialogCurso(String nombreplan,String nombrecurso,int numerocreditos,int codigocurso){
    	PlanEstudio plan=PlanEstudio.find("byNombreplan",nombreplan).first();
    	Curso curso =new Curso(plan, nombrecurso, numerocreditos, codigocurso);
    	curso.save();
    }
    
    public static void tablaAsignatura(long id){
    	PlanEstudio plan=PlanEstudio.findById(id);
    	render(plan);
    }
    
    public static void resultadoBusquedaCurso(){
    	render();
    }
    
    public static void busquedaCurso(int page,int rows,String sidx,String sord){
    	Map filtro=new HashMap<Object, Object>();
    	HashMap<String , Object> response=new HashMap<String, Object>();
    	List<Curso> listaCursos;
    	StringBuilder basequery=new StringBuilder("select c from Curso c where 1=1");
    	String nombrecurso=params.get("nombrecurso");
    	String codigocurso=params.get("codigocurso");
    	String numerocreditos=params.get("numerocreditos");
    	String nombreplan=params.get("nombreplan");
    	if(nombrecurso != null){
    		filtro.put("nombrecurso", nombrecurso);
    		basequery.append(" and c.nombrecurso like :nombrecurso");
    	}
    	
    	if(codigocurso != null){
    		
    		filtro.put("codigocurso",Integer.parseInt(codigocurso));
    		basequery.append(" and c.codigocurso like :codigocurso");
    	}
    	
    	if(numerocreditos !=null){
    		filtro.put("numerocreditos", Integer.parseInt(numerocreditos));
    		basequery.append(" and c.numerocreditos like :numerocreditos");
    	}
    	if(nombreplan != null){
    		filtro.put("nombreplan", nombreplan);
    		basequery.append(" and c.planEstudio.nombreplan =:nombreplan");
    	}
    	
    	String finalquery=basequery.toString();
    	listaCursos=Curso.find(finalquery, filtro).fetch(page, rows);
    
    	response.put("page", String.valueOf("page"));
    	response.put("rows", listaCursos);
    	renderJSON(response,new CursoSerializer());
    	    	
    }
    
    public static void borrarCursoServer(long id){
    	String query="select c from Curso c where c.id=?1";
    	Query jpaquery=JPA.em().createQuery(query);
    	Curso curso=(Curso) jpaquery.setParameter(1, id).getSingleResult();
    	curso.delete();
    }
    
    public static void editarCurso(long id,String nombrecurso,int codigocurso,int numerocreditos,String plan){
    	PlanEstudio planEstudio=PlanEstudio.find("byNombreplan",plan).first();
    	Curso curso=Curso.findById(id);
    	curso.planEstudio=planEstudio;
    	curso.nombrecurso=nombrecurso;
    	curso.numerocreditos=numerocreditos;
    	curso.codigocurso=codigocurso;
    	curso.save();
    }
    
    public static void tablaBusquedaCurso(long id){
    	PlanEstudio plan= PlanEstudio.findById(id);
    	render(plan);
    }
    
    public static void modificarCurso(int codigocurso,long id,String nombrecurso,int numerocreditos,String plan){
    	PlanEstudio planEstudio=PlanEstudio.find("byNombreplan", plan).first();
    	Curso curso=Curso.findById(id);
    	curso.codigocurso=codigocurso;
    	curso.nombrecurso=nombrecurso;
    	curso.numerocreditos=numerocreditos;
    	curso.planEstudio=planEstudio;
    	curso.save();
    }
    
    public static void loadAsignaturas(long id,int rows,int page,String sidx,String sord){
    	if(page<1)
    		page=1;
    	
    	List<Curso> cursos=Curso.find("select c from Curso c join c.planEstudio as p where p.id=? order by c."+sidx+" "+sord, id).fetch(page, rows);
    	HashMap<String, Object> response=new HashMap<String, Object>();
    	
    	response.put("total", Math.ceil(cursos.size()/ (double)rows));
    	response.put("page", String.valueOf(page));
    	response.put("rows", cursos);
    	response.put("records", String.valueOf(cursos.size()));
    	renderJSON(response, new CursoSerializer());
    	
    }

}
